#ifndef _WX_GENERIC_WIZARD_H_
#define _WX_GENERIC_WIZARD_H_

class wxButton;
class wxStaticBitmap;
class wxWizardEvent;
class wxBoxSizer;
class wxWizardSizer;

class wxWizard : public wxWizardBase {
  public:
    // ctor
    wxWizard() { Init(); }
    wxWizard( wxWindow *parent,int id = wxID_ANY,const wxString& title = wxEmptyString,
              const wxBitmap& bitmap = wxNullBitmap,const wxPoint& pos = wxDefaultPosition,
              long style = wxDEFAULT_DIALOG_STYLE ) {
      Init();
      Create( parent, id, title, bitmap, pos, style );
    }
    bool Create( wxWindow *parent,int id = wxID_ANY,const wxString& title = wxEmptyString,
                 const wxBitmap& bitmap = wxNullBitmap,const wxPoint& pos = wxDefaultPosition,
                 long style = wxDEFAULT_DIALOG_STYLE );
    void Init();
    virtual ~wxWizard();
    virtual bool RunWizard( wxWizardPage *firstPage );
    virtual wxWizardPage *GetCurrentPage() const;
    virtual void SetPageSize( const wxSize& size );
    virtual wxSize GetPageSize() const;
    virtual void FitToPage( const wxWizardPage *firstPage );
    virtual wxSizer *GetPageAreaSizer() const;
    virtual void SetBorder( int border );
    const wxBitmap& GetBitmap() const { return m_bitmap; }
    void SetBitmap( const wxBitmap& bitmap );
    bool IsRunning() const { return m_page != NULL; }
    bool ShowPage( wxWizardPage *page, bool goingForward = true );
    virtual void DoCreateControls();
  protected:
    // for compatibility only, doesn't do anything any more
    void FinishLayout() { }

  private:
    // was the dialog really created?
    bool WasCreated() const { return m_btnPrev != NULL; }

    // event handlers
    void OnCancel( wxCommandEvent& event );
    void OnBackOrNext( wxCommandEvent& event );
    void OnHelp( wxCommandEvent& event );

    void OnWizEvent( wxWizardEvent& event );

    void AddBitmapRow( wxBoxSizer *mainColumn );
    void AddStaticLine( wxBoxSizer *mainColumn );
    void AddBackNextPair( wxBoxSizer *buttonRow );
    void AddButtonRow( wxBoxSizer *mainColumn );

    // the page size requested by user
    wxSize m_sizePage;

    // the dialog position from the ctor
    wxPoint m_posWizard;

    // wizard state
    wxWizardPage *m_page;       // the current page or NULL
    wxBitmap      m_bitmap;     // the default bitmap to show

    // wizard controls
    wxButton    *m_btnPrev,     // the "<Back" button
                *m_btnNext;     // the "Next>" or "Finish" button
    wxStaticBitmap *m_statbmp;  // the control for the bitmap
    int m_border;
    bool m_started;
    bool m_wasModal;
    bool m_usingSizer;
    wxBoxSizer *m_sizerBmpAndPage;
    wxWizardSizer *m_sizerPage;

    friend class wxWizardSizer;

    DECLARE_DYNAMIC_CLASS( wxWizard )
    DECLARE_EVENT_TABLE()
    DECLARE_NO_COPY_CLASS( wxWizard )
};

#endif // _WX_GENERIC_WIZARD_H_
